package com.guilin.system.service.impl;

import com.guilin.common.constant.UserConstants;
import com.guilin.common.exception.user.AlumniNotExistsException;
import com.guilin.common.utils.DateUtils;
import com.guilin.common.utils.StringUtils;
import com.guilin.domain.Alumni;
import com.guilin.mapper.AlumniMapper;
import com.guilin.system.service.AlumniService;
import com.guilin.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import java.util.List;

/**
 * 校友信息Service业务层处理
 * 
 * @author xiaoqi
 * @date 2025-06-07
 */
@Service
public class AlumniServiceImpl implements AlumniService
{
    @Autowired
    private AlumniMapper alumniMapper;

    /**
     * 查询校友信息
     * 
     * @param id 校友信息主键
     * @return 校友信息
     */
    @Override
    public Alumni selectAlumniById(Long id)
    {
        return alumniMapper.selectAlumniById(id);
    }

    /**
     * 查询校友信息列表
     * 
     * @param alumni 校友信息
     * @return 校友信息
     */
    @Override
    public List<Alumni> selectAlumniList(Alumni alumni)
    {
        return alumniMapper.selectAlumniList(alumni);
    }

    /**
     * 新增校友信息
     * 
     * @param alumni 校友信息
     * @return 结果
     */
    @Override
    public int insertAlumni(Alumni alumni)
    {
        alumni.setCreateTime(DateUtils.getNowDate());
        return alumniMapper.insertAlumni(alumni);
    }

    /**
     * 修改校友信息
     * 
     * @param alumni 校友信息
     * @return 结果
     */
    @Override
    public int updateAlumni(Alumni alumni)
    {
        alumni.setUpdateTime(DateUtils.getNowDate());
        return alumniMapper.updateAlumni(alumni);
    }

    /**
     * 批量删除校友信息
     * 
     * @param ids 需要删除的校友信息主键
     * @return 结果
     */
    @Override
    public int deleteAlumniByIds(Long[] ids)
    {
        return alumniMapper.deleteAlumniByIds(ids);
    }

    /**
     * 删除校友信息信息
     * 
     * @param id 校友信息主键
     * @return 结果
     */
    @Override
    public int deleteAlumniById(Long id)
    {
        return alumniMapper.deleteAlumniById(id);
    }


    /**
     * 校验用户名是否唯一
     * @param alumni
     * @return
     */
    public boolean checkUsernameUnique(Alumni alumni) {

        //获取校友ID
        Long alumniId = StringUtils.isNull(alumni.getId()) ? -1L : alumni.getId();

        //查询校友用户名信息
        Alumni info = alumniMapper.checkUsernameUnique(alumni.getUsername());

        //如果校友信息不为空或者校友ID与查询校友信息ID不一致，则表示用户名不唯一
        if(StringUtils.isNotNull(info) && info.getId().longValue() != alumniId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }

        return UserConstants.UNIQUE;
    }


    /**
     * 校验手机号码是否唯一
     * @param alumni
     * @return
     */
    public boolean checkPhoneUnique(Alumni alumni) {

        //获取校友ID
        Long alumniId = StringUtils.isNull(alumni.getId())? -1L : alumni.getId();

        //查询校友手机信息
        Alumni info = alumniMapper.checkPhoneUnique(alumni.getPhone());

        //如果校友信息不为空或者校友ID与查询校友信息ID不一致，则表示手机号码不唯一 Long - long 避免null比较
        if(StringUtils.isNotNull(info) && info.getId().longValue()!= alumniId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }


    /**
     * 效验邮箱是否唯一
     * @param alumni
     * @return
     */
    public boolean checkEmailUnique(Alumni alumni) {

        //获取校友ID
        Long alumniId = StringUtils.isNull(alumni.getId())? -1L : alumni.getId();

        //查询校友邮箱信息
        Alumni info = alumniMapper.checkEmailUnique(alumni.getEmail());

        //如果校友信息不为空或者校友ID与查询校友信息ID不一致，则表示邮箱不唯一
        if(StringUtils.isNotNull(info) && info.getId().longValue()!= alumniId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    @Override
    public Alumni selectUserId(Long userId) {
        return alumniMapper.selectUserId(userId);
    }


    /**
     * 根据用户名查询校友信息
     * @param username
     * @return
     */
    public Alumni selectAlumniByUserName(String username) {
        return alumniMapper.selectAlumniByUserName(username);
    }

    /**
     * 修改校友信息状态
     * @param alumni
     * @return
     */
    public int updateAlumniStatus(Alumni alumni) {
        //修改校友信息状态
        return alumniMapper.updateAlumni(alumni);
    }




    /**
     * 修改头像
     * @param alumni
     * @return
     */
    public boolean updateUserAvatar(Alumni alumni) {

        Alumni existingAlumni = selectAlumniById(alumni.getId());

        if (existingAlumni == null) {
            throw new AlumniNotExistsException("校友不存在");
        }

        existingAlumni.setAvatarUrl(alumni.getAvatarUrl());


        return alumniMapper.updateAlumni(existingAlumni) > 0;
    }


    /**
     *
     * @param id          校友ID
     * @param newPassword 新密码
     * @return
     */
    public int updateAlumniPwd(Long id, String newPassword) {

        // 更新密码
        return alumniMapper.updateAlumniPwd(id, newPassword);
    }


    /**
     * 根据用户名查询校友信息
     * @param username
     * @return
     */
    public Alumni selectAlumniByUsername(String username) {

        return alumniMapper.selectAlumniByUsername(username);
    }

    /**
     * 根据手机号查询校友信息
     * @param phone
     * @return
     */
    public Alumni selectAlumniByPhone(String phone) {

        return alumniMapper.selectAlumniByPhone(phone);
    }


    /**
     * 根据邮箱查询校友信息
     * @param email
     * @return
     */
    public Alumni selectAlumniByEmail(String email) {

        return alumniMapper.selectAlumniByEmail(email);
    }


}
